package servlet;

import dao.DaoAlbum;
import dao.DaoArtista;
import dao.DaoMusica;
import entidades.Album;
import entidades.Artista;
import entidades.Musica;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Tarde
 */
@WebServlet(name = "ServletGerenciamento", urlPatterns = {"/ServletGerenciamento"})
public class ServletGerenciamento extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String selecionar = request.getParameter("selecionar");
        String deletar = request.getParameter("deletar");
        String editar = request.getParameter("editar");
        String relacionar = request.getParameter("relacionar");
        String cancelar = request.getParameter("cancelar");
        String tipoResultado = request.getParameter("tipoResultado");
        if (selecionar != null) { //opção SELECIONAR
            HttpSession session = request.getSession();
            int id = Integer.parseInt(selecionar);
            if (tipoResultado.equals("musica")) {
                Musica musica = (new DaoMusica()).get(id);
                session.setAttribute("tipoSelecionado", "musica");
                session.setAttribute("selecionado", musica);

            } else if (tipoResultado.equals("album")) {
                Album album = new DaoAlbum().get(id);
                session.setAttribute("tipoSelecionado", "album");
                session.setAttribute("selecionado", album);

            } else if (tipoResultado.equals("artista")) {
                Artista artista = new DaoArtista().get(id);
                session.setAttribute("tipoSelecionado", "artista");
                session.setAttribute("selecionado", artista);
            }
            RequestDispatcher rd = request.getRequestDispatcher("gerenciamento.jsp");
            rd.forward(request, response);
        } else if (deletar != null) { //opção DELETAR
            int id = Integer.parseInt(deletar);
            if (tipoResultado.equals("musica")) {
                new DaoMusica().remove(id);
            } else if (tipoResultado.equals("album")) {
                new DaoAlbum().remove(id);
            } else if (tipoResultado.equals("artista")) {
                new DaoArtista().remove(id);
            }
            RequestDispatcher rd = request.getRequestDispatcher("gerenciamento.jsp");
            rd.forward(request, response);

        } else if (relacionar != null) {//opção RELACIONAR
            HttpSession session = request.getSession();
            String tipoSelecionado = (String) session.getAttribute("tipoSelecionado");
            int id = Integer.parseInt(request.getParameter("relacionar"));

            if (tipoSelecionado.equals(tipoResultado) || (tipoSelecionado.equals("musica") && tipoResultado.equals("artista")) || (tipoResultado.equals("musica") && tipoSelecionado.equals("artista"))) {
                RequestDispatcher rd = request.getRequestDispatcher("gerenciamento.jsp");
                rd.forward(request, response);
            } else {
                if (tipoSelecionado.equals("musica") && tipoResultado.equals("album")) {
                    Musica m = (Musica) session.getAttribute("selecionado");
                    Album a = new DaoAlbum().get(id);
                    if (!m.getAlbums().contains(a)) {
                        m.addAlbum(a);
                        a.addMusica(m);
                        new DaoMusica().update(m);
                    }
                } else if (tipoSelecionado.equals("album") && tipoResultado.equals("musica")) {
                    Album a = (Album) session.getAttribute("selecionado");
                    Musica m = new DaoMusica().get(id);
                    if (!a.getMusicas().contains(m)) {
                        a.addMusica(m);
                        m.addAlbum(a);
                        new DaoAlbum().update(a);
                    }
                } else if (tipoSelecionado.equals("album") && tipoResultado.equals("artista")) {
                    Album a = (Album) session.getAttribute("selecionado");
                    Artista ar = new DaoArtista().get(id);
                    if (!a.getArtistas().contains(ar)) {
                        a.addArtista(ar);
                        ar.addAlbum(a);
                        new DaoArtista().update(ar);
                    }
                } else if (tipoSelecionado.equals("artista") && tipoResultado.equals("album")) {
                    Artista ar = (Artista) session.getAttribute("selecionado");
                    Album a = new DaoAlbum().get(id);
                    if (!ar.getAlbums().contains(a)) {
                        ar.addAlbum(a);
                        a.addArtista(ar);
                        new DaoAlbum().update(a);
                    }
                }
                session.setAttribute("selecionado", null);
                session.setAttribute("tipoSelecionado", null);
                request.setAttribute("tipoResultado", null);
            }
            RequestDispatcher rd = request.getRequestDispatcher("gerenciamento.jsp");
            rd.forward(request, response);
        } else if (cancelar != null) {
            HttpSession session = request.getSession();
            session.setAttribute("selecionado", null);
            session.setAttribute("tipoSelecionado", null);
            request.setAttribute("tipoResultado", null);
            request.setAttribute("resultado", null);
            RequestDispatcher rd = request.getRequestDispatcher("gerenciamento.jsp");
            rd.forward(request, response);
        } else if (editar != null) {//opção  EDITAR
            int id = Integer.parseInt(request.getParameter("editar"));
            if (tipoResultado.equals("musica")) {
                Musica m = new DaoMusica().get(id);
                request.setAttribute("musicaEditar", m);
            } else if (tipoResultado.equals("album")) {
                Album a = new DaoAlbum().get(id);
                request.setAttribute("albumEditar", a);
            } else if (tipoResultado.equals("artista")) {
                Artista a = new DaoArtista().get(id);
                request.setAttribute("artistaEditar", a);
            }
            request.setAttribute("tipoEdicao", tipoResultado);
            request.setAttribute("id", id);
            RequestDispatcher rd = request.getRequestDispatcher("edGerenciamento.jsp");
            rd.forward(request, response);
        }
    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}
